package com.guocheng.modules.login.service;

import com.guocheng.base.BaseService;
import com.guocheng.modules.login.mapper.MenuDao;
import com.guocheng.modules.login.model.dto.MenuDTO;
import com.guocheng.modules.login.model.po.Menu;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class MenuService extends BaseService<MenuDao, Menu> {

    /**
     * 根据用户id查询权限列表
     * 只用作shiro的权限查询
     *
     * @param id
     * @return
     */
    public List<String> selectByUserId(Integer id) {
        return baseDao.selectByUserId(id);
    }

    /**
     * 根据用户id查询菜单列表
     *
     * @param id
     * @return
     */
    public List<MenuDTO> selectMenuByUserId(Integer id) {
        return baseDao.selectMenuByUserId(id);
    }

    /**
     * 根据角色id查询权限信息
     *
     * @param id
     * @return
     */
    public List<Menu> selectMenuByRoleId(Integer id) {
        return baseDao.selectMenuByRoleId(id);
    }

    /**
     * 根据id删除菜单
     * @param id    要删除菜单的id
     * @return
     */
    @Transactional
    public boolean deleteById(Integer id) {
        //最多三级
        //如果它还有下一级，则循环查是否有第三级
        Menu menu = new Menu().setParentId(id);
        List<Menu> menus = selectList(menu);
        //查出来后menus有数据，则存在第三级
        for (int i1 = 0; i1 < menus.size(); i1++) {
            //删除三级
            int i = deleteByEntity(new Menu().setParentId(menus.get(i1).getId()));
        }
        //删除二级
        int i = deleteByEntity(menu);
        //删除一级
        int b = baseDao.deleteById(id);
        return b>0;
    }

}
